package db;

import db.DTO.DTOAcidente;
import java.sql.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

public class DAOAcidente implements InterfaceDAO {
    
    public DAOAcidente(){
    }

    public Collection recuperaRegistroComParametros(String sNome) {
        //nao esta sendo usado foi implementado apenas na interface.
        throw new UnsupportedOperationException("Not supported yet.");
    }

   

    public Collection recuperaRegistroPorPK(int codigo){
        String sql = "SELECT Codigo, Dt_Acidente, Hora, Horas_Trabalhas_Antes"+
            ",Codigo_Area,Local,Descricao,Codigo_Acidente,Codigo_Gravidade,Retorno"+
            ",Restricao,Incapacidade,Matricula_Funcionario,Codigo_Parte_Corpo,Codigo_Natureza_Lesao"+
            ",Codigo_Agente_Causador,Codigo_Situacao_Geradora FROM ACIDENTE WHERE Codigo = ?";
        List retorno = new ArrayList();
        DbConnect.getIntancDbConnect().conect();
        try{
            PreparedStatement pst = DbConnect.getIntancDbConnect().getConect().prepareStatement( sql );
            pst.setInt(1, codigo );
            ResultSet rs = pst.executeQuery();
            while( rs.next() ) {
                retorno.add(new DTOAcidente(rs.getInt("Codigo"), rs.getString("Dt_Acidente"), rs.getString("Hora"),
                        rs.getInt("Horas_Trabalhas_Antes"), rs.getInt("Codigo_Area"), rs.getString("Local"),
                        rs.getString("Descricao"), rs.getInt("Codigo_Acidente"), rs.getInt("Codigo_Gravidade"),
                        rs.getString("Retorno"), rs.getString("Restricao"), rs.getString("Incapacidade"),
                        rs.getString("Matricula_Funcionario"), rs.getString("Codigo_Parte_Corpo"),
                        rs.getString("Codigo_Natureza_Lesao"), rs.getString("Codigo_Agente_Causador"), rs.getString("Codigo_Situacao_Geradora")));
            }
            rs.close();
            pst.close();
        }
        catch ( SQLException e){
            System.err.println ("\nError Menssage: " + e.getMessage());
        }
        DbConnect.getIntancDbConnect().closeConect();
        return retorno;
    }
    public void insertRegistro(DTOAcidente acidente) throws SQLException{
        String sql = "INSERT INTO acidente("+
            "\"Dt_Acidente\", \"Hora\", \"Horas_Trabalhas_Antes\", \"Codigo_Area\","+
            "\"Local\", \"Descricao\", \"Codigo_Acidente\", \"Codigo_Gravidade\","+
            "\"Retorno\", \"Restricao\", \"Incapacidade\", \"Matricula_Funcionario\","+
            "\"Codigo_Parte_Corpo\", \"Codigo_Natureza_Lesao\", \"Codigo_Agente_Causador\","+
            "\"Codigo_Situacao_Geradora\")"+
            "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

        DbConnect.getIntancDbConnect().conect();

        try{
            DbConnect.getIntancDbConnect().getConect().setAutoCommit(false);
            PreparedStatement pps = DbConnect.getIntancDbConnect().getConect().prepareStatement(sql);
            pps.setString(1, acidente.getDt_Acidente());
            pps.setString(2, acidente.getHora());
            pps.setInt(3, acidente.getHoras_Trabalhas_Antes());
            pps.setInt(4, acidente.getCodigo_Area());
            pps.setString(5, acidente.getLocal());
            pps.setString(6, acidente.getDescricao());
            pps.setInt(7, acidente.getCodigo_Acidente());
            pps.setInt(8, acidente.getCodigo_Gravidade());
            pps.setString(9, acidente.getRetorno());
            pps.setString(10, acidente.getRestricao());
            pps.setString(11, acidente.getIncapacidade());
            pps.setString(12, acidente.getMatricula_Funcionario());
            pps.setString(13, acidente.getCodigo_Parte_Corpo());
            pps.setString(14, acidente.getCodigo_Natureza_Lesao());
            pps.setString(15, acidente.getCodigo_Agente_Causador());
            pps.setString(16, acidente.getCodigo_Situacao_Geradora());

            pps.executeUpdate();
            DbConnect.getIntancDbConnect().getConect().commit();

           
           
            
        }catch(SQLException e){
            System.err.println("\nError Menssage: " + e.getMessage());
            DbConnect.getIntancDbConnect().getConect().rollback();
        }

         DbConnect.getIntancDbConnect().closeConect();
    }
    public Collection recuperaRegistros(){
        String sql = "SELECT Codigo, Dt_Acidente, Hora, Horas_Trabalhas_Antes,"+
                       "Codigo_Area, Local, Matricula_Funcionario FROM ACIDENTE";
       
        List retorno = new ArrayList();
        DbConnect.getIntancDbConnect().conect();
        try{
            PreparedStatement pst = DbConnect.getIntancDbConnect().getConect().prepareStatement( sql );
            ResultSet rs = pst.executeQuery();
            while( rs.next() ) {
               retorno.add(new DTOAcidente(rs.getInt("Codigo") , rs.getString("Dt_Acidente"),  rs.getString("Hora"),
                       rs.getInt("Horas_Trabalhas_Antes"), rs.getInt("Codigo_Area"), rs.getString("Local"),
                       rs.getString("Matricula_Funcionario")));
            }
            rs.close();
            pst.close();
        }
        catch ( SQLException e){
            System.err.println ("\nError Menssage: " + e.getMessage());
        }
        DbConnect.getIntancDbConnect().closeConect();
        return retorno;
    }
    public void deleteRegistroById(int id){
        String sql = "DELETE FROM ACIDENTE WHERE codigo = ?";
        System.out.print(id);
        DbConnect.getIntancDbConnect().conect();
        try{
            PreparedStatement pst = DbConnect.getIntancDbConnect().getConect().prepareStatement( sql );
            pst.setInt(1, id);

            pst.executeQuery();
           
            pst.close();
        }
        catch ( SQLException e){
            System.err.println ("\nError Menssage: " + e.getMessage());
        }
        DbConnect.getIntancDbConnect().closeConect();
    }

    public void updateRegistro(DTOAcidente acidente, int id) throws SQLException {
         String sql = "UPDATE ACIDENTE SET "+
            "Dt_Acidente = ?, Hora = ?, Horas_Trabalhas_Antes = ?, Codigo_Area = ?,"+
            "Local = ?, Descricao = ?, Codigo_Acidente = ?, Codigo_Gravidade = ?,"+
            "Retorno = ?, Restricao = ?, Incapacidade = ?, Matricula_Funcionario = ?,"+
            "Codigo_Parte_Corpo = ?, Codigo_Natureza_Lesao = ?, Codigo_Agente_Causador = ?,"+
            "Codigo_Situacao_Geradora = ? WHERE Codigo = ?";

           DbConnect.getIntancDbConnect().conect();

        try{
            DbConnect.getIntancDbConnect().getConect().setAutoCommit(false);
            PreparedStatement pps = DbConnect.getIntancDbConnect().getConect().prepareStatement(sql);
            pps.setString(1, acidente.getDt_Acidente());
            pps.setString(2, acidente.getHora());
            pps.setInt(3, acidente.getHoras_Trabalhas_Antes());
            pps.setInt(4, acidente.getCodigo_Area());
            pps.setString(5, acidente.getLocal());
            pps.setString(6, acidente.getDescricao());
            pps.setInt(7, acidente.getCodigo_Acidente());
            pps.setInt(8, acidente.getCodigo_Gravidade());
            pps.setString(9, acidente.getRetorno());
            pps.setString(10, acidente.getRestricao());
            pps.setString(11, acidente.getIncapacidade());
            pps.setString(12, acidente.getMatricula_Funcionario());
            pps.setString(13, acidente.getCodigo_Parte_Corpo());
            pps.setString(14, acidente.getCodigo_Natureza_Lesao());
            pps.setString(15, acidente.getCodigo_Agente_Causador());
            pps.setString(16, acidente.getCodigo_Situacao_Geradora());
            pps.setInt(17, id);
            
            pps.executeUpdate();
            DbConnect.getIntancDbConnect().getConect().commit();

        }catch(SQLException e){
            System.err.println("\nError Menssage: " + e.getMessage());
            DbConnect.getIntancDbConnect().getConect().rollback();
        }

         DbConnect.getIntancDbConnect().closeConect();
    }
    
}
